MPP Sample Hi3403V100 使用指导文档
目录
1. 总体概述
1.1 编译系统说明
编译结构
- 顶层Makefile: 自动发现所有子模块并编译
- Makefile.param: 定义传感器类型、音频编解码器等关键配置
- common/: 公共函数库,包含各模块的公共初始化和操作函数
编译命令
# 编译所有sample
cd mpp/sample/ss928v100
make
# 编译特定sample
cd mpp/sample/ss928v100/<module_name>
make
# 清理编译
make clean
# 启用内存共享(MMZ进程隔离时需要)
make MEM_SHARE=y
# 重新编译
make clean && make
输出目录
编译后的可执行文件位于:
mpp/output/<arch>/<ostype>/sample_<module_name>- 例如:
mpp/sample/ss928v100/vio/sample_vio
1.2 配置参数详解
传感器类型配置
编辑 mpp/sample/ss928v100/Makefile.param:
支持的传感器类型(在Makefile.param中查看完整列表):
HY_S0603_MIPI_8M_30FPS_12BIT- 8MP传感器,30fps,12bitHY_S0603_MIPI_8M_30FPS_10BIT_WDR2TO1- 8MP传感器,30fps,10bit,WDR 2:1- (更多传感器类型请参考Makefile.param中的注释)
音频编解码器配置
# 外部编解码器
# ACODEC_TYPE ?= ACODEC_TYPE_ES8388
# 内部编解码器
ACODEC_TYPE ?= ACODEC_TYPE_INNER
INNER_HDMI ?= y
内存共享配置
音频模块库类型
# 静态库(默认)
AUDIO_MODULE_LIB_TYPE ?= AUDIO_LIB_TYPE_STATIC
# 共享库
# AUDIO_MODULE_LIB_TYPE ?= AUDIO_LIB_TYPE_SHARE
1.3 通用注意事项
MMZ进程隔离
如果模块参数 mem_process_isolation 设置为 "1",则启用了MMZ缓冲区的进程隔离属性。在这种情况下,需要编译时设置 MEM_SHARE=y:
信号处理和优雅退出
- 所有sample支持Ctrl+C优雅退出
- 信号处理函数格式:
sample_<module>_handle_sig - 退出时会自动清理资源
平台兼容性
- 支持Linux和LiteOS平台(通过
__LITEOS__宏区分) - 支持用户态和内核态(通过
CONFIG_USER_SPACE宏区分) - 部分特性需要特定编译选项(如
CONFIG_OT_ISP_SUPPORT,CONFIG_OT_AUDIO_SUPPORT)
常见错误排查
| 错误现象 | 可能原因 | 解决方法 |
|---|---|---|
| VI初始化失败 | 传感器类型配置错误 | 检查Makefile.param中的SENSOR0_TYPE配置 |
| MMZ分配失败 | MMZ进程隔离未处理 | 使用 make MEM_SHARE=y 重新编译 |
| 编译失败 | 缺少依赖库 | 确保SDK环境已正确配置 |
| 找不到设备文件 | HDMI未连接或配置错误 | 确认HDMI已连接,检查VO配置 |
1.4 快速开始指南
编译和运行第一个Sample
# 1. 进入sample目录
cd mpp/sample/ss928v100/vio
# 2. 编译
make
# 3. 运行最常用的模式(all mode route)
./sample_vio 0
# 4. 按Ctrl+C退出
预期结果
- 程序启动后会显示初始化信息
- HDMI输出应该显示视频画面
- 控制台会打印各模块的初始化状态
- 按回车键或Ctrl+C可以优雅退出
2. 视频处理模块
2.1 VIO Sample - 视频输入输出示例
主要功能
VI(视频输入)到VPSS(视频处理)到VENC(视频编码)和VO(视频输出)的完整数据流演示。
支持的运行模式
(0)all mode route: vi linear(Online/Offline) -> vpss(Online/Offline) -> venc && vo(1)wdr route: vi wdr(Online) -> vpss(Offline) -> venc && vo(2)fpn calibrate & correct: vi fpn calibrate & correct -> vpss -> venc && vo(3)ldc & dis: vi ldc & dis -> vpss -> venc && vo(4)fisheye: vi fisheye(phys_chn + ext_chn) -> vpss -> venc && vo(5)low delay: vi(pipe & chn lowdelay) -> vpss(lowdelay) -> venc && vo(6)input yuv mux: vi 4mux yuv input -> vpss -> venc && vo(7)user pic: vi user pic (offline) -> vpss -> venc && vo(8)two sensor: vi two sensor (offline) -> vpss -> venc && vo(9)switch mode: vi linear switch to wdr -> vpss -> venc && vo(10)wdr send route: vi wdr(offline) -> isp_runonce -> vpss(Offline) -> venc && vo(11)switch resolution: vi 4K switch to FHD -> vpss -> venc && vo
应用场景
- 视频采集和编码系统
- 实时视频预览和录制
- 多传感器视频处理
- 低延迟视频传输
- 鱼眼镜头校正
- WDR场景处理
编译运行步骤
编译依赖
- 确保SDK环境已正确配置
- 确保传感器类型已正确配置(默认:HY_S0603_MIPI_8M_30FPS_12BIT)
编译命令
运行命令
# 运行模式0(all mode route)
./sample_vio 0
# 运行模式1(wdr route)
./sample_vio 1
# 运行模式7(user pic)
./sample_vio 7
输出文件
- 编译输出:
mpp/output/<arch>/<ostype>/sample_vio - 编码流文件:根据模式不同,会生成H264/H265编码流文件
调用流程
代码执行流程
main()
└─ sample_vio_usage() (参数校验)
└─ sample_register_sig_handler() (注册信号处理)
└─ sample_ipc_server_init() (可选,初始化IPC服务)
└─ SDK_init() (CONFIG_USER_SPACE时)
└─ sample_vio_execute_case() (执行指定模式)
└─ sample_vio_all_mode() / sample_vio_wdr() / ... (根据模式选择)
└─ sample_comm_sys_init() (系统初始化)
└─ sample_comm_vi_create_vi() (创建VI设备)
└─ sample_comm_vpss_create() (创建VPSS)
└─ sample_comm_venc_create() (创建VENC)
└─ sample_comm_vo_create() (创建VO)
└─ sample_pause() (等待用户输入)
└─ sample_comm_sys_exit() (清理资源)
└─ sample_ipc_server_deinit()
└─ SDK_exit()
关键函数调用顺序
- 参数解析和校验
- 信号处理注册(SIGINT, SIGTERM)
- IPC服务器初始化(可选)
- SDK初始化
- 选择并执行特定模式的sample函数
- 等待用户输入(getchar)
- 资源清理和退出
数据流向
关键数据
重要配置参数
| 参数名 | 默认值 | 说明 |
|---|---|---|
| SENSOR0_TYPE | HY_S0603_MIPI_8M_30FPS_12BIT | 传感器类型 |
| g_vo_cfg.vo_dev | SAMPLE_VO_DEV_UHD | VO设备号 |
| g_vo_cfg.intf_sync | HI_VO_OUT_1080P30 | 输出时序 |
| g_vo_cfg.pix_format | HI_PIXEL_FORMAT_YVU_SEMIPLANAR_420 | 像素格式 |
| g_venc_chn_param.frame_rate | 30 | 帧率 |
| g_venc_chn_param.gop | 30 | GOP大小 |
关键数据结构
typedef struct {
hi_vo_dev vo_dev; // VO设备号
hi_vo_intf_type intf_type; // 接口类型
hi_vo_intf_sync intf_sync; // 输出时序
hi_color bg_color; // 背景色
hi_pixel_format pix_format; // 像素格式
hi_rect disp_rect; // 显示区域
hi_size image_size; // 图像尺寸
// ...
} sample_vo_cfg;
重要宏定义
PIC_3840X2160: 4K分辨率 (3840x2160)PIC_1080P: 1080P分辨率 (1920x1080)SAMPLE_VO_DEV_UHD: UHD设备号 (0)HI_PIXEL_FORMAT_YVU_SEMIPLANAR_420: YUV420半平面格式
注意事项
MMZ进程隔离
如果模块参数 "mem_process_isolation" 设置为 "1",则启用了MMZ缓冲区的进程隔离属性。在这种情况下,需要编译时设置 MEM_SHARE=y:
特殊行为说明
- vio sample第7个用例(user pic):第一次使能用户图片功能会显示用户图片,第二次使能会显示背景色。这是代码设计如此,属于正常现象。
- 第一次调用时,传入的用户图片类型为
VI_USER_PIC_FRAME,显示用户图片 - 第二次调用时,传入的类型为
VI_USER_PIC_BGCOLOR,用于配置背景色帧
- 第一次调用时,传入的用户图片类型为
已知限制
- 需要正确配置传感器类型,否则可能导致VI初始化失败
- 某些模式需要特定的传感器支持(如WDR模式)
- 切换分辨率模式(mode 11)需要传感器支持分辨率切换
兼容性说明
- 支持Linux和LiteOS平台(通过
__LITEOS__宏区分) - 支持用户态和内核态(通过
CONFIG_USER_SPACE宏区分)
快速上手指南
最简单的运行示例
# 1. 编译sample
cd mpp/sample/ss928v100/vio
make
# 2. 运行最常用的模式(all mode route)
./sample_vio 0
# 3. 按Ctrl+C退出
预期结果
- 程序启动后会显示初始化信息
- HDMI输出应该显示视频画面
- 控制台会打印各模块的初始化状态
- 按回车键或Ctrl+C可以优雅退出
常见错误排查
| 错误现象 | 可能原因 | 解决方法 |
|---|---|---|
| VI初始化失败 | 传感器类型配置错误 | 检查Makefile.param中的SENSOR0_TYPE配置 |
| 找不到设备文件 | HDMI未连接或配置错误 | 确认HDMI已连接,检查VO配置 |
| MMZ分配失败 | MMZ进程隔离未处理 | 使用 make MEM_SHARE=y 重新编译 |
| 编码流未保存 | 路径权限问题 | 检查当前目录的写权限 |
参数定制方法
修改传感器类型
编辑 mpp/sample/ss928v100/Makefile.param 文件:
# 修改传感器类型为其他支持的传感器
SENSOR0_TYPE ?= HY_S0603_MIPI_8M_30FPS_12BIT
# 其他可选传感器类型(在Makefile.param中列出)
# HY_S0603_MIPI_8M_30FPS_10BIT_WDR2TO1
修改分辨率和帧率
在代码中修改相关配置参数(以vio为例):
// 在sample_vio.c中修改g_venc_chn_param结构体
static sample_comm_venc_chn_param g_venc_chn_param = {
.frame_rate = 30, // 修改帧率(如改为25)
.venc_size = {1920, 1080}, // 修改分辨率
// ...
};
修改编码参数
在代码中修改编码相关配置:
static sample_comm_venc_chn_param g_venc_chn_param = {
.type = HI_PT_H265, // 编码类型:H264/H265/JPEG/MJPEG
.gop = 30, // GOP大小
.rc_mode = SAMPLE_RC_CBR, // 码率控制模式
// ...
};
修改输出分辨率
修改VO配置:
static sample_vo_cfg g_vo_cfg = {
.intf_sync = HI_VO_OUT_1080P30, // 修改输出时序(如改为3840x2160_30)
.disp_rect = {0, 0, 1920, 1080}, // 修改显示区域
.image_size = {1920, 1080}, // 修改图像尺寸
// ...
};
2.2 VENC Sample - 视频编码示例
主要功能
演示H.265/H.264/JPEG/MJPEG视频编码功能,支持多种编码特性和高级功能。
支持的运行模式
(0)normal: H.265e@1080P@30fps + h264e@D1@30fps(1)qpmap: H.265e@1080P@30fps + h264e@1080P@30fps(2)intra_refresh: H.265e@1080P@30fps(row) + h264e@1080P@30fps(column)(3)roi_bg_frame_rate: H.265e@1080P@30fps + H.264@1080P@30fps(4)debreath_effect: H.265e@1080P@30fps(enable) + H.265e@1080P@30fps(disable)(5)roi_set: Mjpege@1080P@30fps(user set roi info by API)(6)roimap: Mjpege@1080P@30fps(user customize every region)
应用场景
- 视频录制和存储
- 实时视频压缩
- ROI(感兴趣区域)编码优化
- 去呼吸效应处理
- 码率控制和图像质量优化
编译运行步骤
编译命令
运行命令
调用流程
代码执行流程
main()
└─ sample_venc_usage() (参数校验)
└─ sample_register_sig_handler() (注册信号处理)
└─ sample_venc_case() (执行指定模式)
└─ sample_venc_normal() / sample_venc_qpmap() / ... (根据模式选择)
└─ sample_comm_sys_init() (系统初始化)
└─ sample_comm_vi_create_vi() (创建VI设备)
└─ sample_comm_vpss_create() (创建VPSS)
└─ sample_comm_venc_create() (创建VENC)
└─ sample_pause() (等待用户输入)
└─ sample_comm_sys_exit() (清理资源)
数据流向
关键数据
重要配置参数
| 参数名 | 默认值 | 说明 |
|---|---|---|
| BIG_STREAM_SIZE | PIC_3840X2160 | 大流分辨率 |
| SMALL_STREAM_SIZE | PIC_1080P | 小流分辨率 |
| frame_rate | 30 | 帧率 |
| gop | 30 | GOP大小 |
编码类型
HI_PT_H265: H.265/HEVC编码HI_PT_H264: H.264/AVC编码HI_PT_JPEG: JPEG编码HI_PT_MJPEG: Motion JPEG编码
注意事项
HEIF文件保存
模式0支持保存HEIF文件,使用第二个参数控制:
./sample_venc 0 0: 不保存HEIF文件./sample_venc 0 1: 保存HEIF文件
编码特性说明
- qpmap模式: 支持QP映射,实现区域化质量控制
- intra_refresh模式: 支持行/列级别的帧内刷新,提高抗误码能力
- roi_bg_frame_rate模式: 支持ROI和背景帧率设置
- debreath_effect模式: 支持去呼吸效应,减少静态场景的闪烁
- roi_set模式: 支持通过API设置ROI信息
- roimap模式: 支持自定义每个区域的编码参数
快速上手指南
最简单的运行示例
预期结果
- 程序启动后会显示初始化信息
- 开始编码后会在当前目录生成编码流文件
- 按回车键或Ctrl+C可以优雅退出
参数定制方法
修改编码参数
// 在sample_venc.c中修改相关配置
static sample_comm_venc_chn_param g_venc_chn_param = {
.type = HI_PT_H265, // 编码类型
.frame_rate = 30, // 帧率
.gop = 30, // GOP大小
.rc_mode = SAMPLE_RC_CBR, // 码率控制模式
// ...
};
修改分辨率
2.3 VDEC Sample - 视频解码示例
主要功能
演示H.265/H.264/JPEG/HEIC视频解码功能,支持播放和低延迟预览。
支持的运行模式
(0)VDEC(H265 PLAYBACK)-VPSS-VO: H.265文件播放(1)VDEC(H264 PLAYBACK)-VPSS-VO: H.264文件播放(2)VDEC(JPEG PLAYBACK)-VPSS-VO: JPEG文件播放(3)VDEC(H265 LOWDELAY PREVIEW)-VPSS-VO: H.265低延迟预览(4)VDEC(HEIC H265 PLAYBACK PREVIEW)-VPSS-VO: HEIC格式的H.265播放预览(需要编译选项支持)
应用场景
- 视频文件播放
- 实时视频解码预览
- 低延迟视频传输显示
- HEIC格式文件显示
编译运行步骤
编译命令
运行命令
# 运行模式0(H265播放)
./sample_vdec 0
# 运行模式1(H264播放)
./sample_vdec 1
# 运行模式2(JPEG播放)
./sample_vdec 2
# 运行模式3(低延迟预览)
./sample_vdec 3
测试数据
测试数据文件位于 vdec/source_file/ 目录:
- H.265编码流文件
- H.264编码流文件
- JPEG图片文件
- HEIC文件(如果支持)
调用流程
代码执行流程
main()
└─ sample_vdec_usage() (参数校验)
└─ sample_register_sig_handler() (注册信号处理)
└─ sample_vdec_case() (执行指定模式)
└─ sample_vdec_h265_playback() / sample_vdec_h264_playback() / ...
└─ sample_comm_sys_init() (系统初始化)
└─ sample_comm_vdec_create() (创建VDEC)
└─ sample_comm_vpss_create() (创建VPSS)
└─ sample_comm_vo_create() (创建VO)
└─ 发送编码流数据到VDEC
└─ sample_pause() (等待用户输入)
└─ sample_comm_sys_exit() (清理资源)
数据流向
关键数据
重要配置参数
| 参数名 | 默认值 | 说明 |
|---|---|---|
| UHD_STREAN_WIDTH | 3840 | 解码宽度 |
| UHD_STREAM_HEIGHT | 2160 | 解码高度 |
| REF_NUM | 参考帧数 | 解码参考帧数量 |
| DISPLAY_NUM | 显示帧数 | 显示帧缓冲数量 |
解码模式
HI_VDEC_SEND_MODE_FRAME: 帧模式发送HI_VDEC_SEND_MODE_COMPAT: 兼容模式(低延迟)
注意事项
测试数据准备
确保 vdec/source_file/ 目录下有对应的测试数据文件:
- H.265流文件用于模式0和3
- H.264流文件用于模式1
- JPEG文件用于模式2
低延迟模式
模式3使用低延迟模式,需要配置:
HEIC支持
模式4需要编译选项 SAMPLE_HEIC_SUPPORT 支持。
快速上手指南
最简单的运行示例
预期结果
- 程序启动后会显示初始化信息
- HDMI输出显示解码后的视频画面
- 按回车键或Ctrl+C可以优雅退出
参数定制方法
修改解码分辨率
// 在sample_vdec.c中修改相关配置
static hi_u32 sample_vdec_get_chn_width() {
return 1920; // 修改宽度
}
static hi_u32 sample_vdec_get_chn_height() {
return 1080; // 修改高度
}
修改参考帧数
2.4 VO Sample - 视频输出示例
主要功能
演示视频输出功能,支持多种输出接口和显示模式。
应用场景
- HDMI视频输出
- 显示设备适配
- 多屏显示
编译运行步骤
编译命令
运行命令
调用流程
代码执行流程
main()
└─ sample_comm_sys_init() (系统初始化)
└─ sample_comm_vo_create() (创建VO)
└─ 发送测试数据到VO
└─ sample_pause() (等待用户输入)
└─ sample_comm_sys_exit() (清理资源)
关键数据
VO设备类型
HI_VO_INTF_HDMI: HDMI接口HI_VO_INTF_BT656: BT656接口HI_VO_INTF_BT1120: BT1120接口
输出时序
HI_VO_OUT_1080P30: 1080P@30fpsHI_VO_OUT_3840x2160_30: 4K@30fps- 更多时序请参考SDK文档
参数定制方法
修改输出接口
修改输出分辨率
2.5 VPSS Sample - 视频处理子系统示例
主要功能
演示VPSS(Video Processing Subsystem)视频处理功能,支持缩放、裁剪、去噪等。
应用场景
- 视频缩放和裁剪
- 多路视频处理
- 视频质量增强
编译运行步骤
编译命令
运行命令
调用流程
代码执行流程
main()
└─ sample_comm_sys_init() (系统初始化)
└─ sample_comm_vpss_create() (创建VPSS)
└─ 发送数据到VPSS处理
└─ sample_pause() (等待用户输入)
└─ sample_comm_sys_exit() (清理资源)
关键数据
VPSS组最大物理通道数
HI_VPSS_MAX_PHYS_CHN_NUM: VPSS组最大物理通道数
压缩模式
HI_COMPRESS_MODE_NONE: 无压缩HI_COMPRESS_MODE_FRAME: 帧压缩HI_COMPRESS_MODE_LOSSLESS: 无损压缩
参数定制方法
修改VPSS输出尺寸
typedef struct {
hi_size max_size; // 最大尺寸
hi_pixel_format pixel_format; // 像素格式
hi_size output_size[HI_VPSS_MAX_PHYS_CHN_NUM]; // 各通道输出尺寸
hi_compress_mode compress_mode[HI_VPSS_MAX_PHYS_CHN_NUM]; // 压缩模式
hi_bool enable[HI_VPSS_MAX_PHYS_CHN_NUM]; // 通道使能
} sample_vpss_chn_attr;
2.6 VGS Sample - 视频图形子系统示例
主要功能
演示VGS(Video Graphics Subsystem)视频图形处理功能,支持叠加、缩放、旋转等。
应用场景
- OSD叠加
- 图形叠加
- 视频变换
编译运行步骤
编译命令
运行命令
调用流程
代码执行流程
main()
└─ sample_comm_sys_init() (系统初始化)
└─ HI_MPI_VGS_Create() (创建VGS任务)
└─ HI_MPI_VGS_BeginJob() (开始VGS任务)
└─ HI_MPI_VGS_AddRegion() (添加处理区域)
└─ HI_MPI_VGS_EndJob() (结束VGS任务)
└─ sample_pause() (等待用户输入)
└─ sample_comm_sys_exit() (清理资源)
关键数据
VGS任务类型
- 缩放
- 裁剪
- 覆盖/叠加
- 镜像
- 旋转
参数定制方法
修改VGS处理参数
根据具体需求修改VGS任务的参数,包括缩放比例、裁剪区域、叠加内容等。
3. 音频处理模块
3.1 Audio Sample - 音频处理示例
主要功能
演示音频采集、编解码、播放等功能。
支持的运行模式
(0)AI to AO loop: 音频采集到音频输出循环(1)AI->AENC->save: 音频采集到编码并保存(2)file->ADEC->AO: 文件解码到音频输出(3)AI->AO VQE: 音频采集通过VQE处理到音频输出(4)AI->AO(HDMI): 音频采集到HDMI音频输出(5)AI->AO(sys_chn): 音频采集到系统通道输出(6)resample test: 重采样测试
应用场景
- 音频录制和播放
- 音频编解码
- 音频质量增强(VQE)
- HDMI音频输出
- 音频重采样
编译运行步骤
编译依赖
- 确保音频编解码器类型已正确配置(ES8388或INNER)
- 确保音频模块库类型已配置
编译命令
运行命令
# 运行模式0(AI->AO loop)
./sample_audio 0
# 运行模式1(AI->AENC->save)
./sample_audio 1
# 运行模式3(AI->AO VQE)
./sample_audio 3
调用流程
代码执行流程
main()
└─ sample_audio_usage() (参数校验)
└─ sample_audio_handle_sig() (注册信号处理)
└─ main_inner(index) (执行指定模式)
└─ sample_audio_ai_ao() / sample_audio_ai_aenc() / ...
└─ sample_comm_sys_init() (系统初始化)
└─ HI_MPI_AI_Create() (创建AI设备)
└─ HI_MPI_AO_Create() (创建AO设备)
└─ HI_MPI_AENC_Create() (创建AENC,如果需要)
└─ HI_MPI_ADEC_Create() (创建ADEC,如果需要)
└─ sample_pause() (等待用户输入)
└─ sample_comm_sys_exit() (清理资源)
数据流向
关键数据
重要配置参数
| 参数名 | 默认值 | 说明 |
|---|---|---|
| ACODEC_TYPE | ACODEC_TYPE_INNER | 音频编解码器类型 |
| 音频采样率 | 48000 | 采样率(Hz) |
| 音频位宽 | 16 | 位宽(bit) |
| 音频通道数 | 2 | 通道数(立体声) |
音频编解码器类型
ACODEC_TYPE_ES8388: ES8388外部编解码器ACODEC_TYPE_INNER: 内部编解码器
音频编码格式
HI_AUDIO_ADPCM_TYPE: ADPCM编码HI_AUDIO_PCM_TYPE: PCM编码HI_AUDIO_G711A_TYPE: G.711A编码HI_AUDIO_G711U_TYPE: G.711U编码HI_AUDIO_G726_TYPE: G.726编码HI_AUDIO_LPCM_TYPE: LPCM编码
注意事项
音频编解码器配置
在Makefile.param中配置音频编解码器类型:
HDMI音频输出
模式4使用HDMI输出音频,需要配置:
VQE功能
模式3使用VQE(Voice Quality Enhancement)功能,包括:
- 回声消除(AEC)
- 噪声抑制(NS)
- 自动增益控制(AGC)
快速上手指南
最简单的运行示例
预期结果
- 程序启动后会显示初始化信息
- 麦克风采集的音频会实时输出到扬声器
- 按回车键或Ctrl+C可以优雅退出
常见错误排查
| 错误现象 | 可能原因 | 解决方法 |
|---|---|---|
| 音频设备打开失败 | 音频编解码器配置错误 | 检查Makefile.param中的ACODEC_TYPE配置 |
| 没有音频输出 | 扬声器未连接或配置错误 | 确认扬声器已连接,检查AO配置 |
| 音频质量差 | VQE参数配置不当 | 调整VQE参数或使用直通模式 |
参数定制方法
修改音频编解码器类型
编辑 mpp/sample/ss928v100/Makefile.param 文件:
修改音频采样参数
// 在sample_audio.c中修改相关配置
static hi_audio_dev ai_dev = 0; // AI设备号
static hi_audio_dev ao_dev = 0; // AO设备号
static hi_audio_chn ai_chn = 0; // AI通道号
static hi_audio_chn ao_chn = 0; // AO通道号
// 修改采样率等参数
修改音频编码格式
// 在创建AENC时修改编码格式
hi_audio_encoder_attr aenc_attr = {
.type = HI_AUDIO_ADPCM_TYPE, // 修改编码类型
.sample_rate = 48000, // 采样率
.bit_width = HI_AUDIO_BIT_WIDTH_16, // 位宽
.sound_mode = HI_AUDIO_SOUND_MODE_STEREO, // 声音模式
};
3.2 AISR Sample - AI语音识别示例
主要功能
演示AI语音识别功能,支持语音命令识别。
应用场景
- 语音控制
- 语音转文本
- 智能语音交互
编译运行步骤
编译命令
运行命令
测试数据
测试数据文件位于 aisr/test_in.yuv
调用流程
代码执行流程
main()
└─ sample_comm_sys_init() (系统初始化)
└─ sample_aisr_core_init() (初始化AISR核心)
└─ 采集音频数据
└─ 进行语音识别
└─ 输出识别结果
└─ sample_pause() (等待用户输入)
└─ sample_comm_sys_exit() (清理资源)
关键数据
AISR核心功能
- 语音预处理
- 特征提取
- 模型推理
- 结果后处理
注意事项
模型文件
确保AISR模型文件已正确配置和加载。
音频输入
确保音频输入设备正常工作。
4. 智能处理模块
4.1 AIISP Sample - AI ISP示例
主要功能
演示AI ISP(Artificial Intelligence Image Signal Processor)功能,包括AI去雾等。
支持的运行模式
(0)aidehaze normal: AI去雾-正常模式(1)aidehaze distant: AI去雾-远景模式(2)aidehaze distant_enlighten: AI去雾-远景增强模式
应用场景
- 图像去雾
- 图像质量增强
- 恶劣环境图像处理
编译运行步骤
编译命令
运行命令
# 运行模式0(aidehaze normal)
./sample_aiisp 0
# 运行模式1(aidehaze distant)
./sample_aiisp 1
# 运行模式2(aidehaze distant_enlighten)
./sample_aiisp 2
测试数据
- RAW数据文件:
aiisp/raw/ - 模型文件:
aiisp/model/(.om文件)
调用流程
代码执行流程
main()
└─ sample_aiisp_usage() (参数校验)
└─ sample_aiisp_case() (执行指定模式)
└─ sample_aiisp_aidehaze_normal() / sample_aiisp_aidehaze_distant() / ...
└─ sample_comm_sys_init() (系统初始化)
└─ 加载AI模型
└─ 处理RAW数据
└─ 输出处理结果
└─ sample_pause() (等待用户输入)
└─ sample_comm_sys_exit() (清理资源)
关键数据
AI去雾模式
- normal: 适用于一般雾气场景
- distant: 适用于远距离雾气场景
- distant_enlighten: 适用于远距离雾气场景并进行增强
模型文件格式
.om: 模型文件格式
注意事项
模型文件准备
确保 aiisp/model/ 目录下有对应的模型文件。
RAW数据准备
确保 aiisp/raw/ 目录下有RAW格式的测试数据。
参数定制方法
修改AI去雾参数
根据具体场景选择不同的去雾模式,或调整模型参数。
4.2 SVP/IVE Sample - 智能视觉处理示例
主要功能
演示IVE(Intelligent Vision Engine)智能视觉处理算法,包括边缘检测、运动检测、目标跟踪等。
支持的运行模式
(0)Canny: Canny边缘检测算法(FILE->IVE->FILE)complete=0: 部分Cannycomplete=1: 完整Canny
(1)Gmm2: GMM背景建模算法(FILE->IVE->FILE)(2)MemoryTest: 内存测试算法(FILE->IVE->FILE)(3)Sobel: Sobel边缘检测算法(FILE->IVE->FILE)(4)St Lk: Lucas-Kanade光流算法(FILE->IVE)(5)PerspTrans: 透视变换算法(FILE->IVE->FILE)(6)Occlusion detected: 遮挡检测(VI->VPSS->IVE->VO_HDMI)(7)Motion detected: 运动检测(VI->VPSS->IVE->VGS->VO_HDMI)(8)Kcf track: KCF目标跟踪(FILE->VDEC->VPSS->SVP_NPU->IVE->VGS->VO_HDMI)
应用场景
- 边缘检测
- 背景建模
- 运动检测
- 目标跟踪
- 光流计算
- 透视变换
编译运行步骤
编译命令
运行命令
# 运行Canny边缘检测(部分)
./sample_ive 0 0
# 运行Canny边缘检测(完整)
./sample_ive 0 1
# 运行GMM背景建模
./sample_ive 1
# 运行Sobel边缘检测
./sample_ive 3
# 运行运动检测
./sample_ive 7
# 运行KCF目标跟踪
./sample_ive 8
测试数据
测试数据文件位于 svp/ive/data/ 目录:
- 输入数据文件
- 输出数据文件
调用流程
代码执行流程
main()
└─ sample_ive_usage() (参数校验)
└─ sample_ive_case() (执行指定模式)
└─ sample_ive_canny() / sample_ive_gmm2() / ...
└─ 加载输入数据
└─ 创建IVE任务
└─ 执行IVE算法
└─ 保存输出结果
└─ sample_pause() (等待用户输入)
└─ 清理资源
数据流向(以运动检测为例)
关键数据
IVE算法说明
- Canny: 经典边缘检测算法,检测图像中的边缘
- GMM2: 高斯混合模型背景建模,用于前景检测
- MemoryTest: 内存测试算法,验证IVE内存操作
- Sobel: Sobel边缘检测算法,基于梯度的边缘检测
- St Lk: Lucas-Kanade稀疏光流算法,跟踪特征点运动
- PerspTrans: 透视变换,用于图像几何变换
- Occlusion detected: 遮挡检测,检测场景中的遮挡物
- Motion detected: 运动检测,检测场景中的运动物体
- Kcf track: KCF目标跟踪,跟踪指定目标
算法数据流向类型
- FILE->IVE->FILE: 从文件读取数据,IVE处理,结果保存到文件
- FILE->IVE: 从文件读取数据,IVE处理,无输出文件
- VI->VPSS->IVE->VO_HDMI: 实时视频流处理,结果显示在HDMI
- VI->VPSS->IVE->VGS->VO_HDMI: 实时视频流处理,经过VGS后显示在HDMI
- FILE->VDEC->VPSS->SVP_NPU->IVE->VGS->VO_HDMI: 文件解码后,经过NPU、IVE、VGS处理后显示
注意事项
测试数据准备
确保 svp/ive/data/ 目录下有对应的测试数据文件。
实时模式注意事项
模式6、7、8使用实时视频流,需要:
- VI设备正常工作
- HDMI显示设备连接
Canny算法参数
Canny算法支持两种模式:
complete=0: 部分Canny,只执行部分处理步骤complete=1: 完整Canny,执行完整处理流程
快速上手指南
最简单的运行示例
预期结果
- 程序启动后会显示初始化信息
- IVE算法处理输入数据
- 结果保存到输出文件或显示在HDMI
- 按回车键或Ctrl+C可以优雅退出
参数定制方法
修改算法参数
各个IVE算法都有相应的参数结构体,根据需要修改:
// 例如:Canny算法参数
hi_ive_candle_ctrl candle_ctrl = {
// 修改Canny算法参数
};
// 例如:GMM算法参数
hi_ive_gmm_ctrl gmm_ctrl = {
// 修改GMM算法参数
};
5. 图像处理模块
5.1 Fisheye Sample - 鱼眼镜头示例
主要功能
演示鱼眼镜头校正功能,包括鱼眼展开和畸变校正。
应用场景
- 鱼眼摄像头
- 全景监控
- 360度视角
编译运行步骤
编译命令
运行命令
调用流程
代码执行流程
main()
└─ sample_comm_sys_init() (系统初始化)
└─ 创建鱼眼校正任务
└─ 配置鱼眼校正参数
└─ 处理视频流
└─ sample_pause() (等待用户输入)
└─ sample_comm_sys_exit() (清理资源)
关键数据
鱼眼校正类型
- 等距投影
- 等立体角投影
- 正射投影
- 立体投影
参数定制方法
修改鱼眼校正参数
根据鱼眼镜头的参数调整校正参数,包括:
- 校正中心点
- 校正半径
- 校正映射模式
5.2 AWB Online Calibration - 白平衡在线校准示例
主要功能
演示AWB(自动白平衡)在线校准功能。
应用场景
- 摄像头校准
- 颜色校正
- 图像质量优化
编译运行步骤
编译命令
运行命令
调用流程
代码执行流程
main()
└─ sample_comm_sys_init() (系统初始化)
└─ 配置AWB校准参数
└─ 执行AWB在线校准
└─ sample_pause() (等待用户输入)
└─ sample_comm_sys_exit() (清理资源)
参数定制方法
修改AWB校准参数
根据场景需求调整AWB校准参数。
5.3 Dynamic BLC Online Calibration - 动态黑电平校准示例
主要功能
演示动态黑电平校准功能。
应用场景
- 黑电平校准
- 图像质量优化
- 暗部细节增强
编译运行步骤
编译命令
运行命令
调用流程
代码执行流程
main()
└─ sample_comm_sys_init() (系统初始化)
└─ 配置动态黑电平校准参数
└─ 执行动态黑电平校准
└─ sample_pause() (等待用户输入)
└─ sample_comm_sys_exit() (清理资源)
参数定制方法
修改动态黑电平校准参数
根据场景需求调整动态黑电平校准参数。
5.4 LSC Online Calibration - 镜头阴影校准示例
主要功能
演示LSC(Lens Shading Correction)镜头阴影校准功能。
应用场景
- 镜头阴影校正
- 图像均匀性优化
- 图像质量提升
编译运行步骤
编译命令
运行命令
调用流程
代码执行流程
main()
└─ sample_comm_sys_init() (系统初始化)
└─ 配置LSC校准参数
└─ 执行LSC在线校准
└─ sample_pause() (等待用户输入)
└─ sample_comm_sys_exit() (清理资源)
参数定制方法
修改LSC校准参数
根据镜头特性调整LSC校准参数。
6. 功能特性模块
6.1 Region Sample - 区域管理示例
主要功能
演示Region(区域管理)功能,支持多种区域类型和操作。
应用场景
- 遮挡区域设置
- ROI区域设置
- 运动区域检测
编译运行步骤
编译命令
运行命令
测试数据
测试资源文件位于 region/res/ 目录:
- BMP图片文件
- H265编码流文件
调用流程
代码执行流程
main()
└─ sample_region_usage() (参数校验)
└─ sample_region_case() (执行指定功能)
└─ sample_comm_sys_init() (系统初始化)
└─ 创建和管理Region
└─ sample_pause() (等待用户输入)
└─ sample_comm_sys_exit() (清理资源)
关键数据
Region类型
- 遮挡区域
- ROI区域
- 运动区域
参数定制方法
修改Region参数
根据需求修改Region的参数,包括区域位置、大小、属性等。
6.2 Cipher Sample - 加密示例
主要功能
演示Cipher加密功能,支持视频流加密和解密。
应用场景
- 视频加密传输
- 数据安全保护
- 版权保护
编译运行步骤
编译命令
运行命令
调用流程
代码执行流程
main()
└─ sample_cipher_usage() (参数校验)
└─ sample_cipher_case() (执行指定功能)
└─ sample_comm_sys_init() (系统初始化)
└─ 配置加密参数
└─ 执行加密/解密操作
└─ sample_pause() (等待用户输入)
└─ sample_comm_sys_exit() (清理资源)
关键数据
加密算法
- AES
- DES
- 其他支持的加密算法
参数定制方法
修改加密参数
根据安全需求修改加密算法、密钥等参数。
6.3 HDMI Sample - HDMI输出示例
主要功能
演示HDMI视频输出功能。
应用场景
- HDMI显示
- 外接显示器
- 视频展示
编译运行步骤
编译命令
运行命令
测试数据
测试数据文件位于 hdmi/source_file/ 目录
调用流程
代码执行流程
main()
└─ sample_comm_sys_init() (系统初始化)
└─ 配置HDMI输出参数
└─ 输出视频到HDMI
└─ sample_pause() (等待用户输入)
└─ sample_comm_sys_exit() (清理资源)
关键数据
HDMI输出时序
- 1080P@30fps
- 1080P@60fps
- 4K@30fps
- 更多时序请参考SDK文档
参数定制方法
修改HDMI输出参数
6.4 HEIF Sample - HEIF格式示例
主要功能
演示HEIF(High Efficiency Image Format)格式的编码和解码。
应用场景
- 高效图片存储
- HEIF格式支持
- 图片压缩优化
编译运行步骤
编译命令
运行命令
注意事项
HEIF支持
需要编译选项 SAMPLE_HEIC_SUPPORT 支持。
6.5 HNR Sample - 降噪示例
主要功能
演示HNR(High Noise Reduction)降噪功能。
应用场景
- 图像降噪
- 低光照场景
- 图像质量提升
编译运行步骤
编译命令
运行命令
参数定制方法
修改降噪参数
根据噪声强度调整降噪参数。
6.6 Composite Sample - 复合功能示例
主要功能
演示多种功能的组合使用。
应用场景
- 多功能组合
- 复杂场景应用
编译运行步骤
编译命令
运行命令
6.7 Snap Sample - 抓拍示例
主要功能
演示视频抓拍功能,支持从视频流中抓取图片。
应用场景
- 视频抓拍
- 图片保存
- 关键帧提取
编译运行步骤
编译命令
运行命令
参数定制方法
修改抓拍参数
根据需求修改抓拍的分辨率、格式、保存路径等。
6.8 Photo Sample - 拍照示例
主要功能
演示拍照功能。
应用场景
- 拍照
- 图像采集
- 静态图像获取
编译运行步骤
编译命令
运行命令
参数定制方法
修改拍照参数
根据需求修改拍照的分辨率、格式、质量等。
7. 高级功能模块
7.1 Bitrate Auto - 码率自适应示例
主要功能
演示码率自适应功能,根据场景自动调整编码码率。
应用场景
- 自适应码率控制
- 网络带宽优化
- 存储空间优化
编译运行步骤
编译命令
运行命令
参数定制方法
修改码率自适应参数
根据网络状况和存储需求调整码率自适应参数。
7.2 SVC Rate Auto - SVC码率自适应示例
主要功能
演示SVC(Scalable Video Coding)码率自适应功能。
应用场景
- SVC编码
- 可伸缩码率控制
- 多层视频编码
编译运行步骤
编译命令
运行命令
参数定制方法
修改SVC参数
根据需求调整SVC的层数、码率等参数。
7.3 Scene Auto - 场景自适应示例
主要功能
演示场景自适应功能,根据场景自动调整图像处理参数。
应用场景
- 场景识别
- 自适应图像处理
- 多场景支持
编译运行步骤
编译命令
运行命令
参数定制方法
修改场景参数
根据应用场景调整场景识别和自适应参数。
7.4 Traffic Capture - 交通抓拍示例
主要功能
演示交通抓拍功能,支持车辆检测、车牌识别等。
应用场景
- 交通监控
- 车辆抓拍
- 车牌识别
编译运行步骤
编译命令
运行命令
调用流程
代码执行流程
main()
└─ sample_comm_sys_init() (系统初始化)
└─ 配置交通抓拍参数
└─ 执行车辆检测和抓拍
└─ sample_pause() (等待用户输入)
└─ sample_comm_sys_exit() (清理资源)
参数定制方法
修改交通抓拍参数
根据实际场景调整车辆检测、抓拍等参数。
7.5 UVC App - UVC应用示例
主要功能
演示UVC(USB Video Class)应用功能,支持USB摄像头。
应用场景
- USB摄像头
- USB视频传输
- 即插即用视频设备
编译运行步骤
编译命令
运行命令
注意事项
UVC设备支持
确保USB摄像头设备已正确连接和配置。
7.6 Host UVC - Host UVC示例
主要功能
演示Host UVC功能,作为USB主机控制UVC设备。
应用场景
- USB主机
- UVC设备控制
- USB视频采集
编译运行步骤
编译命令
运行命令
注意事项
USB主机配置
确保USB主机功能已正确配置。
8. 其他模块
8.1 AVS Sample - AVS示例
主要功能
演示AVS(Audio Video Synchronization)音视频同步功能。
应用场景
- 音视频同步
- 多媒体播放
- 音视频对齐
编译运行步骤
编译命令
运行命令
参数定制方法
修改音视频同步参数
根据需求调整音视频同步的容差、补偿等参数。
8.2 DIS Sample - 电子防抖示例
主要功能
演示DIS(Digital Image Stabilization)电子防抖功能。
应用场景
- 图像防抖
- 手持拍摄
- 运动场景
编译运行步骤
编译命令
运行命令
参数定制方法
修改防抖参数
根据运动情况调整防抖强度和补偿参数。
8.3 GFBG Sample - GF/BG示例
主要功能
演示GF(Graphic Frame)和BG(Background Frame)功能。
应用场景
- 图形层叠加
- 背景设置
- 图形显示
编译运行步骤
编译命令
运行命令
参数定制方法
修改GF/BG参数
根据显示需求调整图形层和背景层参数。
8.4 MCF Sample - MCF示例
主要功能
演示MCF(Multi-Camera Framework)多摄像头框架功能。
应用场景
- 多摄像头协同
- 多视角监控
- 多传感器融合
编译运行步骤
编译命令
运行命令
参数定制方法
修改MCF参数
根据摄像头数量和配置调整MCF参数。
8.5 PCIV Sample - PCIe虚拟化示例
主要功能
演示PCIV(PCIe Virtualization)PCIe虚拟化功能。
应用场景
- PCIe虚拟化
- 多系统共享
- 虚拟机支持
编译运行步骤
编译命令
运行命令
注意事项
PCIe配置
确保PCIe功能已正确配置。
8.6 Correlation Calc - 相关性计算示例
主要功能
演示相关性计算功能。
应用场景
- 图像匹配
- 相似度计算
- 特征匹配
编译运行步骤
编译命令
运行命令
参数定制方法
修改相关性计算参数
根据匹配精度和速度需求调整相关性计算参数。
8.7 TDE Sample - 二维引擎示例
主要功能
演示TDE(2D Engine)二维图形引擎功能。
应用场景
- 二维图形处理
- 图像变换
- 图形加速
编译运行步骤
编译命令
运行命令
调用流程
代码执行流程
main()
└─ sample_comm_sys_init() (系统初始化)
└─ HI_MPI_TDE_Open() (打开TDE设备)
└─ HI_MPI_TDE_BeginJob() (开始TDE任务)
└─ 配置TDE操作(缩放、旋转、拷贝等)
└─ HI_MPI_TDE_EndJob() (结束TDE任务)
└─ HI_MPI_TDE_Close() (关闭TDE设备)
└─ sample_pause() (等待用户输入)
└─ sample_comm_sys_exit() (清理资源)
关键数据
TDE操作类型
- 拷贝
- 缩放
- 旋转
- 镜像
- 填充
- 混合
参数定制方法
修改TDE参数
根据图形处理需求调整TDE的缩放、旋转、混合等参数。
附录
A. 常用宏定义
分辨率宏
#define PIC_3840X2160 {3840, 2160} // 4K分辨率
#define PIC_1920X1080 {1920, 1080} // 1080P分辨率
#define PIC_1280X720 {1280, 720} // 720P分辨率
#define PIC_640X480 {640, 480} // VGA分辨率
像素格式宏
#define HI_PIXEL_FORMAT_YVU_SEMIPLANAR_420 // YUV420半平面格式
#define HI_PIXEL_FORMAT_YUV_SEMIPLANAR_420 // YUV420半平面格式(交替)
#define HI_PIXEL_FORMAT_YUV_400 // 灰度格式
#define HI_PIXEL_FORMAT_RGB_888 // RGB888格式
VO设备号
B. 编译选项
传感器类型
在 mpp/sample/ss928v100/Makefile.param 中设置:
内存共享
音频编解码器
C. 常见问题
Q1: 编译失败,提示找不到头文件
A: 确保SDK环境已正确配置,检查 Makefile.param 中的路径设置。
Q2: 运行时提示MMZ分配失败
A: 使用 make MEM_SHARE=y 重新编译。
Q3: HDMI没有输出
A: 检查HDMI是否连接,确认VO配置正确。
Q4: VI初始化失败
A: 检查传感器类型配置是否正确,确认传感器已连接。
Q5: 音频没有输出
A: 检查音频编解码器配置,确认音频设备正常。